import pandas as pd

df=pd.read_csv('product.csv',encoding='utf-8')
#使用set_index
df1=df.set_index("分类")
df2=df.reset_index()

#排序
df3=df.set_index(['分类','商店'])
df3.sort_index(ascending=False,inplace=True)
#--------------------------------------------------------
#选取、排序、过滤
df.columns=['type','name','price']
ordice=['A','B','C','D','E','F']
df.index=ordice

#1.选取数据
mql=df['C':'E']
#使用索引表标签选取数据
mql1=df.loc[ordice[1]]


##过滤数据
a1=df[df.price>20]


#使用isin()函数检查指定阈值是否在列表当中，过滤出列表中的数据
a2=df[df['type'].isin(['科技','居家'])]


## 使用多个条件和字符串函数过滤数据
a3=df[(df.price>15)&(df.price<25)]

#增加一行
df.loc['G']=['科学','全脸超',28.50]
a4=df[df['type'].str.startswith('科')]

#排序数据
#将price字段作为索引，指定从大到小
df2=df.set_index('price')
df2.sort_index(ascending=False,inplace=True)

#使用指定阈值进行排序
a5=df.sort_values('price',ascending=False)
df.sort_values(['type','price'],inplace=True)


#使用drop删除某一列数据
a6=df.drop(['price'],axis=1)
# print(a6)

#新增数据
df.loc["G"]=["科学","全脸超",28.5]

s=pd.Series({'type':'科学','name':'大润发','price':79.2})
df2=df.append(s,ignore_index=True)

#新增字段
df['sales']=[124.5,227.5,156.7,435.6,333.7,259.8,111.4]

#方法二
df.loc[:,'city']=['台北','新竹','台北','台中','新竹','高雄','高兴']

# 3.连接数据框----concat/merge()

columns=['type','name','price']
df_empty=pd.DataFrame(None,index=ordice,columns=columns)

#连接多个DataFrame
dff=pd.read_json('product.json')
columns=['type','name','price']
dff.index=['a','b','c','d','e','f']
dff.columns=columns

df2=pd.read_csv('product.csv',encoding='utf-8')

df2.index=['g','h','i','g','k','l']
df2.columns=columns

#使用concat连接两个数据框
df3=pd.concat([dff,df2])

#忽略索引进行连接
df4=pd.concat([dff,df2],ignore_index=True)


#合并两个数据框---merge()
df5=pd.merge(dff,df2)

df6=pd.merge(df2,dff)

#使用左连接
df7=pd.merge(df2,dff,how='left')

#---------------------------------------
#使用群组来求和及计算平均
mql=pd.read_csv('product.csv',encoding='utf-8')

mql.index=['a','b','c','d','e','f']
mql.columns=['type','name','price']

b1=mql.groupby('type').sum()
b2=mql.groupby(['type','name']).mean()

#数据透视表
pivot_products=mql.pivot_table(index='type',columns='name',values='price')

#套用表格函数
def double(x):
    return x*2

b3=mql['price'].apply(double)

#匿名函数
b4=mql['price'].apply(lambda x:x*2)

#统计函数----count和describe()

b5=mql['price'].describe()

#处理遗漏值
#显示遗漏值的信息
# print(df.info())

#删除NaN值
b6=mql.dropna()
#也可以加上how='any',表示删除所有拥有NaN阈值的数据
b6=mql.dropna(how='any')

#how='all',表示全部阈值都是NaN后才删除
b7=mql.dropna(how='all')
#指定删除某一字段，只要有Nan就删除
b8=mql.dropna(subset=['type'])

#填补遗漏值
b9=df.fillna(value=1)

#填入某列的均值
df['price']=mql['price'].fillna(mql['price'].mean())

#处理重复值
#使用drop_duplicates()
b10=mql.drop_duplicates()
#删除重复的阈值
b11=mql.drop_duplicates('price')

#若想保留最后一行
b12=mql.drop_duplicates('price',keep='last')

#若一行都不想保留
b13=mql.drop_duplicates('price',keep=False)

#转换分类数据
size_mapping={'xxl':5,'xl':4,'l':3,'m':2,'s':1}

#相当于映射关系
mql['size']=mql['size'].map(size_mapping)
print(mql)